class MiddlewareNode:
    ''' 中间件节点 '''
    def __init__(self, func = None, router = None, path = None):
        self.func = func       # 中间件处理函数
        self.router = router   # 路由对象
        self.next = None       # 下一个中间件节点
        self.path = path       # 匹配路径
        if self.path:
            # 匹配路径使用 / 进行分隔
            self.path = self.path.split('/')
            # 删除第一个空字符串
            if self.path[0] == '':
                self.path = self.path[1:]
            # 求出 self.path 的长度
            self.path_len = len(self.path)

    def rule(self, ptr) -> bool:
        ''' 规则匹配函数 '''
        # 如果当前中间件不限制任何规则 则返回 True 表示匹配成功
        if self.path is None:
            return True
        # 其次判断路径长度是否符合
        if self.path_len < len(ptr.path):
            return False
        # 否则进行路径匹配
        for i in range(self.path_len):
            # 先查看是否是路径参数
            if self.path[i][0] == ':':
                ptr.req.params[self.path[i][1:]] = ptr.path[i]
                continue
            # 不是路径参数则直接查看是否匹配
            if self.path[i] != ptr.path[i]:
                return False
        # 全部匹配成功放行
        ptr.path = ptr.path[self.path_len+1:]
        return True
